import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig } from 'axios';

class HttpAxios {
    intance: AxiosInstance;
    constructor(config: AxiosRequestConfig) {
        this.intance = axios.create({
            baseURL: config.baseURL,
        })
        // 添加请求拦截器
        axios.interceptors.request.use(function (config) {
            // 在发送请求之前做些什么
            return config;
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });

        // 添加响应拦截器
        axios.interceptors.response.use(function (response) {
            // 2xx 范围内的状态码都会触发该函数。
            // 对响应数据做点什么
            return response;
        }, function (error) {
            // 超出 2xx 范围的状态码都会触发该函数。
            // 对响应错误做点什么
            return Promise.reject(error);
        });
    }
    request<T>(config: AxiosRequestConfig): Promise<T> {
        return new Promise((resolve, reject) => {
            this.intance.request<T, any>(config)
                .then(res => {
                    resolve(res)
                })
                .catch(err => {
                    reject(err)
                })
        })
    }
    post<T>(config: AxiosRequestConfig): Promise<T> {
        return this.intance.request({ ...config, method: 'post' })
    }
    get<T>(config: AxiosRequestConfig): Promise<T> {
        return this.intance.request({ ...config, method: 'get' })
    }
}

export default new HttpAxios({ baseURL: 'http://localhost:4000' })